import { ChainMap } from '@feng3d/render-api';

/**
 * GPU着色器模块管理器。
 */
export class WGPUShaderModule
{
    /**
     * 从设备以及着色器代码获得GPU着色器模块。
     *
     * @param device 设备。
     * @param code 着色器代码。
     * @returns GPU着色器模块。
     */
    static getGPUShaderModule(device: GPUDevice, code: string)
    {
        let gpuShaderModule = this.map.get([device, code]);
        if (gpuShaderModule) return gpuShaderModule;

        gpuShaderModule = device.createShaderModule({ code });

        gpuShaderModule.getCompilationInfo().then((compilationInfo) =>
        {
            compilationInfo.messages.forEach((message) =>
            {
                console.log(message);
            });
        });

        this.map.set([device, code], gpuShaderModule);

        return gpuShaderModule;
    }

    private static readonly map = new ChainMap<[GPUDevice, string], GPUShaderModule>();
}
